#include <iostream>
#include <functional>
#include <vector>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <sys/wait.h>

int main()
{
    sigset_t sig;   // 用户栈上开辟的变量
    sigemptyset(&sig);

    printf("core dump 1\n");
    printf("core dump 2\n");

    // int* p = nullptr;
    // *p = 10;

    printf("core dump 3\n");
    printf("core dump 4\n");

    pid_t id = fork();
    if(id == 0)
    {
        sleep(2);
        // int a = 10;
        // a /= 0;
        int* p = nullptr;
        *p = 10;

        exit(1);
    }

    int status = 0;
    pid_t rid = waitpid(id, &status, 0);
    if(rid > 0)
    {
        printf("exit code: %d, exit signal: %d, core dump: %d\n",
            (status>>8)&0xFF, status&0x7F, (status>>7)&0x01);
    }

    return 0;
}

// void sigcb(int sig)
// {
//     std::cout << "我收到了一个信号：" << sig << std::endl;
//     // 故意不让进程退出
// }

// int main()
// {
//     signal(SIGFPE, sigcb);
//     // signal(SIGSEGV, sigcb);

//     sleep(3);

//     // int* p = nullptr;
//     // *p = 10;
//     int a = 10;
//     a /= 0;
//     printf("我的进程崩溃了！\n");

//     return 0;
// }